package com.one.pass.config;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.UUID;
/*
TryRunModel类用于存储与@TryRun注解相关的运行信息。
包含执行次数、参数数据、参数类型、方法名称、服务类型、服务名称和唯一标识符（MD5值）等属性。
使用Lombok注解简化代码，生成常用的getter、setter和其他方法。
提供一个带参数的构造函数和一个静态工厂方法build，用于方便地创建TryRunModel实例
*/

@NoArgsConstructor  // 使用Lombok注解，生成一个无参构造函数
@Data  // 使用Lombok注解，生成getter、setter、toString、equals和hashCode方法
public class TryRunModel {
    // 执行次数
    Integer runIndex = 0;

    // 参数
    private String data;

    // 参数类型
    private String paramsCls;

    // 方法名称
    private String method;

    // 服务类型
    private String serviceName;

    // 服务类型
    private String name;

    // MD5值，用于唯一标识，初始化时生成一个随机UUID
    private String md5 = UUID.randomUUID().toString();

    // 带参数的构造函数
    public TryRunModel(String data, String cls, String method, String serviceName, String name) {
        this.data = data;
        this.paramsCls = cls;
        this.method = method;
        this.serviceName = serviceName;
        this.name = name;
    }

    // 静态工厂方法，用于创建TryRunModel实例
    public static TryRunModel build(Object params, String paramsClas, String method, Object service, String name) {
        return new TryRunModel(JacksonUtil.obj2Json(params), paramsClas, method, service.getClass().getName(), name);
    }
}
